﻿<?php
// +-------------------------
// | 公共函数库
// +-------------------------


/**
 * 自动引入控制器 并实例化 调用方法
 * @param string $name
 * @param string $method
 */
function load_controller($name, $method) {

	require_once(APP_PATH.'controller/'.$name.'Controller.class.php');

	$controller = '\\App\Controller\\' . $name.'Controller';
	$obj = new $controller();
	$obj->$method();

}

/**
 * 自动引入模型 并返回该模型对象
 * @param  string $name
 * @return obj 
 */
function load_model ($name) {

	require_once(APP_PATH.'model/'.$name.'model.class.php');

	$model = $name.'Model';

	return new $model();
}

/**
 * 实例化Model基础类
 */
function M($tableName = '') {
	$model = "\\Framework\\Core\\Model";
	return new $model($tableName);
}


/**
 * 返回数组中指定的一列
 * 返回inputArr数组中键值为column_key的列， 如果指定了可选参数index_key，那么input数组中的这一列的值将作为返回数组中对应值的键。 
 * @param  array $inputArr
 * @param  mixed $column_key
 * @param  mixed $index_key   
 * @return array
 * @author LittleGG <2015.03.26>
 */
function array_column_php5_5($inputArr, $column_key, $index_key ='') {

	//方法1： 用PHP内置的array_map函数来解决     tips: 用到闭包的知识 用use给闭包函数传递外部变量
	// $returnArr = array_map(function($element) use ($columnName) {return $element[$columnName];}, $array);//tips: param:callback,array
	

	//方法2： 自定义函数
	$returnArr = array();

	foreach ($inputArr as $arrRow) {

		if (empty($index_key)) {
			$returnArr[] = $arrRow[$column_key];

		} else {
			$temp_key = $arrRow[$index_key];
			$returnArr[$temp_key] = $arrRow[$column_key];
		}

		
	}

	return $returnArr;

}


/**
 * 向一个数字插入一个 k=>v 元素
 * @param $input 要插入的数组
 * @param  
 * @param  $positionArr 位置 field:before field:after
 */
function insert_to_array($input, $insert, $positionArr) {

	$arr = explode(':', $positionArr);
	$field    = $arr[0];
	$position = $arr[1];

	if ( empty($field) || empty($position) ) return FALSE;

	$newArr = array();

	foreach ($input as $key => $v) {
		$newArr[$key] = $v;

		if ($key == $field) {

			if ($position == 'before') {
				
				unset($newArr[$key]);
				$newArr[key($insert)] = $insert[key($insert)];
				$newArr[$key] = $v;
			} else if ($position == 'after') {
				
				$newArr[key($insert)] = $insert[key($insert)];
			}


		}

	}
	
	return $newArr;

}

/**
 * 数组里两个元素(k AND v)调换
 * @param  array  $input
 * @param  string $reverse_key_1
 * @param  string $reverse_key_2
 * @return array  
 */
function array_element_reverse($input, $reverse_keyName_1, $reverse_keyName_2) {
	//思路：先构造一个调换数组的key值的索引数组  在将索引数组的key值先调换顺序 再foreach组建新array

	$indexArr = range(0, count($input)-1);
	$reverseKeyArr = array_combine($indexArr, array_keys($input)); //将$input数组所有key建成索引数组

	$key_1_index = array_search($reverse_keyName_1, $reverseKeyArr);
	$key_2_index = array_search($reverse_keyName_2, $reverseKeyArr);

	$reverseKeyArr[$key_1_index] = $reverse_keyName_2;
	$reverseKeyArr[$key_2_index] = $reverse_keyName_1;

	$arr = array();
	foreach ($reverseKeyArr as $inputKey) {
		$arr[$inputKey] = $input[$inputKey];
	}

	return $arr ? $arr : array();

	
}
